package com.liushuyv.calculator.ui;
import java.util.Scanner;
import com.liushuyv.calculator.*;//跨包引用
import com.liushuyv.calculator.bll.AddOperation;
import com.liushuyv.calculator.bll.IOperation;
import com.liushuyv.calculator.bll.Operation;
import com.liushuyv.calculator.bll.SubOperation;

/*
 **@Author:刘淑钰
 **Created on 2020/11/16
 * 运算器3： 分出addoperation and subopreation，实现功能单一化
    把add，sub中相同的代码抽象为operation，抽象类前面一个类后面一个类，叫扩展继承 extend
    * 为了数据a,b经过operation还能被add等继承，把数据的私有继承改为保护继承
    * operation变成了抽象类不能被实例化
    * 增加乘法功能不要修改原类，好处在于开放封闭，功能单一都实现了
    * 但是在ui中还是通过直接创建对象使用，违背了迪米特法则
    * 下一步改为简单工厂模式
 */
public class Test {
    public static void main(String[] args) throws Exception {
        int numberA,numberB,result;
        Scanner scanner= new Scanner(System.in);//扫描输入
        String oprType;//用符号判断做减法还是加法
        numberA = scanner.nextInt();
        numberB = scanner.nextInt();
        oprType = scanner.next();//获取字符串
        IOperation opr = null;//父类型指针指向子类型对象
        opr.setValue(numberA,numberB);
        switch (oprType){
            case "+":
                opr = new AddOperation();
                break;
            case "-":
                opr = new SubOperation();
                break;//生成不同的模式
            default:
                throw new Exception("运算符错了");
        }
        result = opr.getResult();//多态的体现
        System.out.println(result);
    }
}
